//package com.piesat.quake.business.device.bis;
//
//import com.piesat.quake.business.device.model.ConfigurationUpdate;
//import com.piesat.quake.business.device.mqtt.DataType;
//import com.piesat.quake.business.device.mqtt.NumberType;
//import com.piesat.quake.business.device.mqtt.param.CharParseParam;
//import com.piesat.quake.business.device.mqtt.param.ListParseParam;
//import com.piesat.quake.business.device.mqtt.param.NumberParseParam;
//import com.piesat.quake.business.device.mqtt.param.ParseParam;
//
//import java.util.HashMap;
//import java.util.LinkedList;
//import java.util.List;
//import java.util.Map;
//
//import static com.piesat.quake.business.device.mqtt.reader.NumberReader.LITTLE_ENDIAN;
//
///**
// * 解析参数
// *
// * @author Gersy
// * @date 2023/2/20
// * @since 1.0
// */
//public class ParseConfig {
//
//    private final Map<String, List<ParseParam>> CONFIG_MAP = new HashMap<>();
//    private static final ParseConfig INSTANCE = new ParseConfig();
//
//    public static ParseConfig getInstance() {
//        return INSTANCE;
//    }
//
//    public ParseConfig() {
//        init();
//    }
//
//    private void init() {
//        initBase();
//        initConfigRequest();
//        initDeviceEvent();
//        initDeviceUpdate();
//
//        initNetworkConfig();
//        initStationInfoConfig();
//        initThresholdConfig();
//        initPassagewayBlockConfig();
//        initPassagewayConfig();
//        initNtpConfig();
//    }
//
//    private void initBase() {
//        LinkedList<ParseParam> params = new LinkedList<>();
//        setCommonParam(params);
//        CONFIG_MAP.put("base", params);
//    }
//
//    private void initNtpConfig() {
//        LinkedList<ParseParam> params = new LinkedList<>();
//        CONFIG_MAP.put("ntp", params);
//        params.add(NumberParseParam.createInt("length"));
//        params.add(CharParseParam.create("master", 32));
//        params.add(CharParseParam.create("slave", 32));
//    }
//
//    private void initPassagewayBlockConfig() {
//        LinkedList<ParseParam> params = new LinkedList<>();
//        CONFIG_MAP.put("passagewayBlocks", params);
//        params.add(NumberParseParam.createByte("number"));
//        params.add(NumberParseParam.createByte("nextNumber"));
//        params.add(NumberParseParam.createInt("length"));
//        params.add(NumberParseParam.createByte("id"));
//        params.add(NumberParseParam.createFloat("threshold"));
//        params.add(NumberParseParam.createFloat("realtimeThreshold"));
//        params.add(NumberParseParam.createDouble("biasVoltage"));
//        params.add(NumberParseParam.createDouble("sensitivity"));
//    }
//
//    private void initPassagewayConfig() {
//        LinkedList<ParseParam> params = new LinkedList<>();
//        CONFIG_MAP.put("passageway", params);
//        params.add(NumberParseParam.createInt("length"));
//        params.add(new ListParseParam("passagewayBlocks",
//                ConfigurationUpdate.Passageway.PassagewayBlock.class,
//                CONFIG_MAP.get("passagewayBlocks"),
//                (field) -> {
//                    if (field.equals("nextNumber")) {
//                        return true;
//                    }
//                    return false;
//                }));
//    }
//
//    private void initThresholdConfig() {
//        LinkedList<ParseParam> params = new LinkedList<>();
//        CONFIG_MAP.put("threshold", params);
//        params.add(NumberParseParam.createInt("length"));
//        params.add(NumberParseParam.createByte("eventCheckMode"));
//        params.add(NumberParseParam.createInt("staCount"));
//        params.add(NumberParseParam.createInt("ltaCount"));
//        params.add(NumberParseParam.createFloat("staLtaThreshold"));
//        params.add(NumberParseParam.createFloat("level4Threshold"));
//        params.add(NumberParseParam.createFloat("level5Threshold"));
//        params.add(NumberParseParam.createFloat("level6Threshold"));
//        params.add(NumberParseParam.createFloat("level7Threshold"));
//        params.add(NumberParseParam.createFloat("level8Threshold"));
//        params.add(NumberParseParam.createFloat("level9Threshold"));
//    }
//
//    private void initStationInfoConfig() {
//        LinkedList<ParseParam> params = new LinkedList<>();
//        CONFIG_MAP.put("stationInfo", params);
//        params.add(NumberParseParam.createInt("length"));
//        params.add(CharParseParam.create("id", 8));
//        params.add(NumberParseParam.createFloat("longitude"));
//        params.add(NumberParseParam.createFloat("latitude"));
//        params.add(NumberParseParam.createFloat("azimuthal"));
//        params.add(NumberParseParam.createFloat("strainThreshold"));
//        params.add(NumberParseParam.createFloat("accelerationThreshold"));
//        params.add(CharParseParam.create("code", 2));
//        params.add(CharParseParam.create("number", 2));
//        params.add(NumberParseParam.createInt("passageDataCount"));
//        params.add(NumberParseParam.createInt("samplingRate"));
//        params.add(NumberParseParam.createByte("mode"));
//        params.add(CharParseParam.create("version", 8));
//    }
//
//    private void initNetworkConfig() {
//        LinkedList<ParseParam> params = new LinkedList<>();
//        CONFIG_MAP.put("network", params);
//        params.add(NumberParseParam.createInt("length"));
//        params.add(NumberParseParam.createByte("communicationType"));
//        params.add(NumberParseParam.createInt("address"));
//        params.add(NumberParseParam.createShort("port"));
//        params.add(CharParseParam.create("username", 32));
//        params.add(CharParseParam.create("password", 128));
//        params.add(CharParseParam.create("path", 32));
//    }
//
//    public List<ParseParam> get(String topic) {
//        return CONFIG_MAP.get(topic);
//    }
//
//    private void initConfigRequest() {
//        LinkedList<ParseParam> params = new LinkedList<>();
//        CONFIG_MAP.put(MqttHelper.Inbound.CONFIG_DATA, params);
//        setCommonParam(params);
//    }
//
//    private void initDeviceEvent() {
//        LinkedList<ParseParam> params = new LinkedList<>();
//        CONFIG_MAP.put(MqttHelper.Inbound.EVENT_DATA, params);
//        setCommonParam(params);
//        params.add(NumberParseParam.createInt("number"));
//        params.add(NumberParseParam.createDouble("eventTimestamp"));
//        params.add(NumberParseParam.createByte("eventCause"));
//        params.add(CharParseParam.create("intensity", 1));
//        params.add(NumberParseParam.createFloat("oscillation"));
//        params.add(NumberParseParam.createFloat("staLta"));
//        params.add(NumberParseParam.createFloat("maxOscillation"));
//        params.add(NumberParseParam.createFloat("maxStaLta"));
//    }
//
//    private void initDeviceUpdate() {
//        LinkedList<ParseParam> params = new LinkedList<>();
//        CONFIG_MAP.put(MqttHelper.Outbound.UPDATE_DEVICE, params);
//        setCommonParam(params);
//        params.add(CharParseParam.create("name", 16));
//        params.add(CharParseParam.create("version", 8));
//    }
//
//    private void setCommonParam(List<ParseParam> params) {
//        params.add(new CharParseParam("type", DataType.CHAR.ordinal(), 2));
//        params.add(new NumberParseParam("length", DataType.NUMBER.ordinal(), LITTLE_ENDIAN, NumberType.INT));
//        params.add(new CharParseParam("id", DataType.CHAR.ordinal(), 8));
//        params.add(new NumberParseParam("endian", DataType.NUMBER.ordinal(), LITTLE_ENDIAN, NumberType.BYTE));
//        params.add(new NumberParseParam("timestamp", DataType.NUMBER.ordinal(), LITTLE_ENDIAN, NumberType.DOUBLE));
//    }
//}
